package model;

import java.util.ArrayList;
import java.util.List;

public class Mesa {

	//ATRIBUDO
	private List<Jogador> jogadores;
	private Domino domino;
	private List<Peca> pecasJogadas;
	private List<Peca> dormePecas;

	//CONSTRUTOR
	public Mesa(){
		this.domino = new Domino();
		this.jogadores = new ArrayList<Jogador>();
		this.pecasJogadas = new ArrayList<>();
		this.dormePecas = new ArrayList<Peca>();
	}

	//METODOS
	public Boolean cadastroDeJogadores(String nome, int vezDoJogador){
		Jogador player = new Jogador();
		Boolean retorno = true;
		if(nome != null){
			player.setNome(nome);
			player.setVezDoJogador(vezDoJogador);
			jogadores.add(player);
			retorno = false;
		}
		return retorno;
	}

	public void distribuiPecasDosJogadores(){
		for (Jogador jogador : jogadores) {
			for( ; jogador.getPecasJogador().size() < 6 ; ){
				Peca peca = domino.getPecas().get((int)(0+(Math.random()*(domino.getPecas().size()-1))));
				domino.getPecas().remove( peca );
				jogador.getPecasJogador().add(peca);
			}
		}
		dormePecas.addAll(domino.getPecas());
		domino.getPecas().removeAll(dormePecas);
	}

	public int vezDaJogada(){
		List<Peca> pecas = new ArrayList<Peca>();
		Peca p = null;
		for (Jogador j : jogadores) {
			pecas.add(j.temCarroca());
		}
		for (Peca peca : pecas) {
			if(peca != null){
				for (int i=0 ; i < pecas.size() ; i++) {
					if(p == null){
						p = peca;
					}else{
						if(p != null && p.getvLeft() < peca.getvLeft()){
							p = peca;
						}
					}
				}
			}
		}		
		return pecas.indexOf(p);
	}
	
	public Peca getCabecaEsqueda(){
		return pecasJogadas.get(0);
	}
	
	public Peca getCabecaDireita(){
		return pecasJogadas.get(pecasJogadas.size()-1);
	}
	
	public Jogador contagemDePontos(){
		Jogador jogador = null;
		int menosPontos = -1;
		for (Jogador j: jogadores) {
			if(menosPontos < j.jogadorContaPontos()){
				jogador = j;
			}
		}
		return jogador;
	}


	//GETTERS E SETTERS
	public List<Jogador> getJogadores() {
		return jogadores;
	}
	public void setJogadores(List<Jogador> jogadores) {
		this.jogadores = jogadores;
	}
	public Domino getDomino() {
		return domino;
	}
	public void setDomino(Domino domino) {
		this.domino = domino;
	}
	public List<Peca> getPecasJogadas() {
		return pecasJogadas;
	}
	public void setPecasJogadas(List<Peca> pecasJogadas) {
		this.pecasJogadas = pecasJogadas;
	}
	public List<Peca> getDormePecas() {
		return dormePecas;
	}
	public void setDormePecas(List<Peca> dormePecas) {
		this.dormePecas = dormePecas;
	}
}
